Try-Catch Block এবং Error Middleware হল দুটি গুরুত্বপূর্ণ কৌশল যা অ্যাসিনক্রোনাস প্রোগ্রামিং এবং ওয়েব অ্যাপ্লিকেশনে ত্রুটি (error) হ্যান্ডলিং এবং পরিচালনা করার জন্য ব্যবহৃত হয়। Try-Catch Block সাধারণত সিনক্রোনাস কোডে ব্যবহৃত হয়, যেখানে Error Middleware Express বা অন্যান্য ওয়েব ফ্রেমওয়ার্কে ত্রুটি হ্যান্ডলিং এর জন্য ব্যবহৃত হয়।
১. Try-Catch Block
Try-Catch Block হল একটি সিনক্রোনাস ত্রুটি হ্যান্ডলিং পদ্ধতি যা কোডের মধ্যে ত্রুটি ধরা এবং ত্রুটির জন্য নির্দিষ্ট ব্যবস্থা গ্রহণ করতে ব্যবহৃত হয়। Try ব্লকের মধ্যে কোড লেখার সময় যদি কোনো ত্রুটি ঘটে, তাহলে তা Catch ব্লকের মাধ্যমে ধরা হয় এবং ত্রুটির প্রসেসিং করা হয়।
Try-Catch Block এর সাধারণ ব্যবহার:
try {
// যে কোডটি অ্যাটেম্পট করা হবে
let result = riskyFunction(); // উদাহরণস্বরূপ, কোনো কাজ যা ত্রুটি ঘটাতে পারে
console.log(result);
} catch (error) {
// ত্রুটি ধরা হলে এই ব্লকটি চালানো হবে
console.error('Error occurred:', error.message);
}এখানে:
- try ব্লকের মধ্যে যে কোড লেখা হয়, তা এক্সিকিউট হওয়ার চেষ্টা করা হয়।
- যদি try ব্লকের মধ্যে কোনো ত্রুটি (error) ঘটে, তাহলে তা catch ব্লক দ্বারা ধরা হয় এবং সেই ত্রুটি প্রসেস করা হয়।
Try-Catch Example (এখানে riskyFunction() ফাংশনটি কিছু ভুল কোডের কারণে ত্রুটি ঘটাচ্ছে):
function riskyFunction() {
throw new Error('Something went wrong!');
}
try {
riskyFunction(); // ত্রুটি ঘটবে এখানে
} catch (error) {
console.log('Caught an error:', error.message); // Caught an error: Something went wrong!
}এই উদাহরণে, riskyFunction একটি কৃত্রিম ত্রুটি (error) তৈরি করছে, যা try ব্লকে ধরা হচ্ছে এবং catch ব্লকে এর সঠিক বার্তা লোগ করা হচ্ছে।
২. Error Middleware in Express
Error Middleware হল Express এ ব্যবহৃত একটি বিশেষ middleware যা অ্যাপ্লিকেশনে ঘটে যাওয়া ত্রুটিগুলো ধরতে এবং সেগুলোর জন্য প্রতিক্রিয়া দেয়। Express এর মধ্যে যে কোনো HTTP রিকোয়েস্টের পর, যদি কোনো ত্রুটি ঘটে, তবে error handling middleware টি কাজ করে।
Error Middleware কিভাবে কাজ করে:
Express এ error middleware টি সাধারণত অ্যাপ্লিকেশন চলাকালীন ত্রুটিগুলোর জন্য একটি কাস্টম প্রতিক্রিয়া (response) তৈরি করতে ব্যবহৃত হয়।
Express এ Error Middleware তৈরি করা:
const express = require('express');
const app = express();
// সাধারণ রাউট
app.get('/', (req, res) => {
res.send('Hello, world!');
});
// একটি রাউট যেখানে ত্রুটি ঘটবে
app.get('/error', (req, res) => {
throw new Error('This is a forced error');
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error(err.message); // ত্রুটির বার্তা লোগ করা
res.status(500).send({ error: 'Something went wrong!' }); // 500 - Internal Server Error
});
app.listen(3000, () => {
console.log('Server running at http://localhost:3000');
});এখানে:
/errorরাউটে একটি কৃত্রিম ত্রুটি ঘটানো হচ্ছে।- Error Middleware (যেটি
app.useদিয়ে সংজ্ঞায়িত) সমস্ত ত্রুটির জন্য কাজ করবে, এবং ত্রুটির বার্তা লোগ করবে এবং ইউজারকে একটি500 Internal Server Errorসহ একটি বার্তা পাঠাবে।
Error Middleware Parameters:
err: ত্রুটির অবজেক্ট (error object)।req: রিকোয়েস্ট অবজেক্ট।res: রেসপন্স অবজেক্ট।next: পরবর্তী middleware কল করার জন্য ব্যবহৃত ফাংশন (এটি ত্রুটির পরবর্তী পর্যায়ে চলে যেতে সাহায্য করে, যদি প্রয়োজন হয়)।
Example: Custom Error Messages
app.use((err, req, res, next) => {
if (err.message === 'Database not found') {
res.status(404).send({ error: 'Database not found!' });
} else {
res.status(500).send({ error: 'An unexpected error occurred!' });
}
});এখানে, ত্রুটি ধরার পর, আপনি কাস্টম ত্রুটি বার্তা দিতে পারেন এবং বিভিন্ন HTTP স্ট্যাটাস কোড (যেমন 404 Not Found, 500 Internal Server Error) রিটার্ন করতে পারেন।
৩. Asynchronous Error Handling with Try-Catch
Asynchronous কোডে try-catch ব্লক ব্যবহার করার জন্য, async এবং await ব্যবহার করতে হয়। সাধারণভাবে, try-catch ব্লক অ্যাসিনক্রোনাস কোডে ত্রুটি ধরতে পারে যদি আপনি await ব্যবহার করেন।
Example: Async Function with Try-Catch
async function fetchData() {
try {
let response = await fetch('https://api.example.com/data');
let data = await response.json();
console.log(data);
} catch (error) {
console.log('Error occurred:', error.message); // ত্রুটি ধরবে এবং বার্তা প্রদর্শন করবে
}
}
fetchData();এখানে, fetch ফাংশনটি একটি অ্যাসিনক্রোনাস অপারেশন। যদি কোনো ত্রুটি ঘটে (যেমন, নেটওয়ার্ক সমস্যা), তাহলে তা catch ব্লকে ধরা হবে এবং সঠিক বার্তা প্রদর্শিত হবে।
৪. Error Handling Best Practices
- Centralized Error Handling: সমস্ত ত্রুটির জন্য একটি একক error handler middleware তৈরি করা, যাতে আপনি সহজেই ত্রুটি পরিচালনা করতে পারেন এবং সঠিক HTTP স্ট্যাটাস কোড ফেরত পাঠাতে পারেন।
- Error Logging: ত্রুটির সঠিক লগ রাখুন যাতে আপনি প্রোডাকশন পরিবেশে সমস্যাগুলো চিহ্নিত এবং সমাধান করতে পারেন। যেমন,
console.error()অথবা কোনো লগিং লাইব্রেরি যেমনwinstonব্যবহার করা। - Client-Side Error Handling: সার্ভার থেকে যে ত্রুটি ফেরত আসে তা ক্লায়েন্ট সাইডে উপযুক্ত বার্তা এবং স্ট্যাটাস কোড দিয়ে ব্যবহারকারীদের জানানো উচিত।
- Custom Error Messages: ক্লায়েন্টকে তথ্য প্রদান করতে কাস্টম ত্রুটি বার্তা ব্যবহার করুন যাতে ইউজার বুঝতে পারে কী সমস্যা ঘটেছে।
সারাংশ
- Try-Catch Block হল একটি সিনক্রোনাস ত্রুটি হ্যান্ডলিং পদ্ধতি যা কোডের মধ্যে ত্রুটি ঘটলে তা ধরা এবং প্রক্রিয়াকরণ করতে ব্যবহৃত হয়।
- Error Middleware হল Express অ্যাপ্লিকেশনে ত্রুটি হ্যান্ডলিংয়ের জন্য ব্যবহৃত একটি মিডলওয়্যার যা সার্ভার-সাইডে সমস্ত ত্রুটির জন্য একটি কাস্টম প্রতিক্রিয়া তৈরি করে।
- Async/Await এর সাথে try-catch ব্যবহার করে অ্যাসিনক্রোনাস কোডেও ত্রুটি ধরতে এবং হ্যান্ডল করতে সক্ষম হন।
- Best Practices এর মধ্যে centralized error handling, error logging, এবং user-friendly error messages অন্তর্ভুক্ত।
Read more